package com.ruijiang.service.OrderService.Impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.ruijiang.constant.DefaultNum;
import com.ruijiang.dto.count.OrderCountDto;
import com.ruijiang.dto.count.PartnerCollectDto;
import com.ruijiang.dto.count.VMTaskCountDto;
import com.ruijiang.dto.page.PageOrderDto;
import com.ruijiang.mapper.OrderServiceMapper.OrderMapper;
import com.ruijiang.result.PageResult;
import com.ruijiang.service.OrderService.OrderService;
import com.ruijiang.vo.common.EchartCollectVO;
import com.ruijiang.vo.sku.SkuCollectCountVO;
import com.ruijiang.vo.sku.SkuCountVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    OrderMapper orderMapper;

    /**
     * 分页获取订单列表
     * @param dto
     * @return
     */
    @Override
    public PageResult getOrderList(PageOrderDto dto) {
        PageHelper.startPage(dto.getPageIndex(),dto.getPageSize());
        Page page= (Page)orderMapper.getOrderList(dto);
        return PageResult.pageBuild(page);
    }

    /**
     * 返回售货机的订单数
     * @param dto
     * @return
     */
    @Override
    public String getOrderCount(OrderCountDto dto) {
        return orderMapper.getOrderCount(dto);
    }

    /**
     * 获取订单销售额
     * @param dto
     * @return
     */
    @Override
    public String getOrderAmount(OrderCountDto dto) {
        String amount = orderMapper.getOrderAmount(dto);
        if (StringUtils.hasText(amount)){
            amount= DefaultNum.DEFAULT_NUM_STR;
        }
        return  amount;
    }

    /**
     * 获取设备商品销量
     * @param innerCode
     * @param start
     * @param end
     * @param dto
     * @return
     */
    @Override
    public List<SkuCollectCountVO> getSkuCollectCount(String innerCode, String start, String end, VMTaskCountDto dto) {

        return orderMapper.getSkuCollectCount(innerCode,start,end,dto,2);
    }

    /**
     * 根据地区汇总销售额数据(销售量分布)
     * @param start
     * @param end
     * @return
     */
    @Override
    public EchartCollectVO regionCollect(String start, String end) {
        List<Map<String, Object>> list = orderMapper.regionCollect(start,end);
        //判空
        if (CollectionUtils.isEmpty(list)){
            return EchartCollectVO.buildNull();
        }
        // 提取地区名称及销量
        List<String> name = list.stream().map(item -> item.get("name").toString()).collect(Collectors.toList());
        List<Integer> count = list.stream().map(item -> Integer.parseInt(item.get("count").toString())).collect(Collectors.toList());
        // 构建返回
        return EchartCollectVO.buildAll(name,count);
    }

    /**
     * 获取销量前几的商品
     *
     * @param topValue
     * @param start
     * @param end
     * @return
     */
    @Override
    public List<SkuCountVO> getSkuTop(Integer topValue, String start, String end) {
        List<SkuCountVO> skuList = orderMapper.getSkuCount(topValue, start, end);
        //判空返回空数组
        if (skuList.isEmpty()){
            return new ArrayList<>();
        }
        return skuList;
    }

    /**
     * 获取销售额统计
     * @param collectType
     * @param start
     * @param end
     * @return
     */
    @Override
    public EchartCollectVO getAmountCollect(String collectType, String start, String end) {
        //按日期统计销量
        List<Map<String,Object>> list = orderMapper.getAmountCollect(collectType,start,end);
        //判空
        if (CollectionUtils.isEmpty(list)){
            return EchartCollectVO.buildNull();
        }
        //提取日期和对应销量
        List<String> date = list.stream().map(item -> item.get("date").toString()).collect(Collectors.toList());
        List<Integer> amount = list.stream().map(item -> Integer.parseInt(item.get("amount").toString())).collect(Collectors.toList());
        //构建返回
        return EchartCollectVO.buildAll(date,amount);
    }

    /**
     * 获取一定日期范围之内的合作商分成汇总数据
     * @param dto
     * @return
     */
    @Override
    public PageResult getPartnerCollect(PartnerCollectDto dto) {
        PageHelper.startPage(dto.getPageIndex(),dto.getPageSize());
        List<PartnerCollectDto> list = orderMapper.getPartnerCollect(dto);
        Page page = (Page) list;
        return PageResult.pageBuild(page);
    }
}
